#[钛妹]: 钛哥！迭代器是不是像快递分拣机的机械臂？
#[钛哥]: 精妙比喻！迭代器就是能记住位置的智能指针。看这个分拣系统：

class PackageFlow:
    """模拟快递分拣流水线的迭代器"""
    def __init__(self, max_packages):
        self.packages = ["包裹"+str(i) for i in range(1,max_packages+1)]
        self.index = 0  # 当前分拣位置记录器
        
    #[钛妹]: __iter__必须返回自己？
    #[钛哥]: 对！就像启动流水线电源：
    def __iter__(self):
        return self
    
    #[钛妹]: __next__怎么控制流程？
    #[钛哥]: 每次取件移动指针，看这个：
    def __next__(self):
        if self.index < len(self.packages):
            result = self.packages[self.index]
            self.index += 1
            return f"正在分拣：{result}"
        else:
            #[钛哥]: 触发停止协议就像关停流水线
            raise StopIteration

#[钛妹]: 试试这个迭代器！
flow = PackageFlow(3)
print(next(flow))  # 正在分拣：包裹1
print(next(flow))  # 正在分拣：包裹2

#[钛妹]: 超过数量会怎样？
try:
    print(next(flow))  # 正常
    print(next(flow))  # 触发异常
except StopIteration:
    print("【警报】流水线已空仓！")

#[钛妹]: for循环怎么配合？
#[钛哥]: 自动处理起止，看这个：
for item in PackageFlow(2):
    print(item)  # 输出两件包裹的分拣信息

#[钛妹]: 自定义终止条件呢？
class TemperatureAlert:
    """温度监控迭代器"""
    def __init__(self, temps):
        self.temps = temps
        self.pos = 0
    
    def __iter__(self):
        return self
    
    def __next__(self):
        if self.pos >= len(self.temps):
            raise StopIteration
        current = self.temps[self.pos]
        self.pos +=1
        if current > 30:
            return f"{current}℃！超过安全阈值！"
        else:
            return f"{current}℃ 温度正常"

#[钛妹]: 实战测试温度监控
alert_system = TemperatureAlert([28, 31, 25, 33])
for status in alert_system:
    print(status)  # 显示温度异常提示

#[钛妹]: 无限迭代器会怎样？
class InfiniteLoader:
    """模拟无限加载动画"""
    symbols = ['◐', '◓', '◑', '◒']
    
    def __iter__(self):
        self.count = 0
        return self
    
    def __next__(self):
        symbol = self.symbols[self.count % 4]
        self.count +=1
        return symbol

#[钛妹]: 这个会无限循环吗？
loader = InfiniteLoader()
import itertools
for s in itertools.islice(loader, 5):  # 限制取5次
    print(s, end=' → ')  # 显示加载动画序列

#[钛妹]: 文件读取也是迭代器？
#[钛哥]: 正确！看这个逐行读取：
with open('test.txt', 'w') as f:
    f.write("第一行\n第二行\n第三行")
    
with open('test.txt') as f:
    print("\n文件内容：")
    for i, line in enumerate(f):
        print(f"行{i+1}: {line.strip()}")

#[钛妹]: 生成器表达式怎么用？
#[钛哥]: 类似快捷创建迭代器，看：
cube_iter = (x**3 for x in range(1,4))
print("\n立方数迭代器：")
print(next(cube_iter))  # 1
print(next(cube_iter))  # 8

#[钛妹]: 迭代器只能单向移动？
class RewindIterator:
    """可回退的迭代器"""
    def __init__(self, data):
        self.data = data
        self.index = -1  # 初始位置
    
    def __iter__(self):
        return self
    
    def __next__(self):
        self.index +=1
        if self.index < len(self.data):
            return self.data[self.index]
        raise StopIteration
    
    def prev(self):
        """自定义回退方法"""
        self.index -=1
        if self.index >=0:
            return self.data[self.index]
        raise StopIteration

#[钛妹]: 测试可回退迭代器
rewind = RewindIterator(['A', 'B', 'C'])
print("\n可回退迭代器：")
print(next(rewind))  # A
print(next(rewind))  # B
print(rewind.prev())  # A
print(next(rewind))  # B

#[钛妹]: 今天大开眼界！总结一下：
#[钛妹]: 迭代器是智能书签，记得住流程位置
#[钛妹]: __next__像传送带，__iter__是启动键
#[钛妹]: StopIteration是终止密码，防止无限循环
#[钛妹]: 对了各位！持续学习才是硬道理！点赞关注不迷路！